/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.controler;

import com.camachosanchez.bean.Alineaciones;
import com.camachosanchez.bean.DetalleAlineacion;
import com.camachosanchez.bean.FuncionEje;
import com.camachosanchez.bean.Neumaticos;
import com.camachosanchez.bean.TipoAngulo;
import com.camachosanchez.controler.exceptions.NonexistentEntityException;
import com.camachosanchez.util.JPAUtil;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityNotFoundException;
import javax.persistence.Query;

/**
 *
 * @author ZULLY
 */
public class DetalleAlineacionJpaController implements Serializable {

    public DetalleAlineacionJpaController(EntityManagerFactory emf) {
        this.emf = JPAUtil.getEntityManagerFactory();
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(DetalleAlineacion detalleAlineacion) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            TipoAngulo idTipoAngulo = detalleAlineacion.getIdTipoAngulo();
            if (idTipoAngulo != null) {
                idTipoAngulo = em.getReference(idTipoAngulo.getClass(), idTipoAngulo.getId());
                detalleAlineacion.setIdTipoAngulo(idTipoAngulo);
            }
            FuncionEje idFuncionEje = detalleAlineacion.getIdFuncionEje();
            if (idFuncionEje != null) {
                idFuncionEje = em.getReference(idFuncionEje.getClass(), idFuncionEje.getId());
                detalleAlineacion.setIdFuncionEje(idFuncionEje);
            }
            Alineaciones idAlineacion = detalleAlineacion.getIdAlineacion();
            if (idAlineacion != null) {
                idAlineacion = em.getReference(idAlineacion.getClass(), idAlineacion.getId());
                detalleAlineacion.setIdAlineacion(idAlineacion);
            }
            Neumaticos idNeumatico = detalleAlineacion.getIdNeumatico();
            if (idNeumatico != null) {
                idNeumatico = em.getReference(idNeumatico.getClass(), idNeumatico.getId());
                detalleAlineacion.setIdNeumatico(idNeumatico);
            }
            em.persist(detalleAlineacion);
            if (idTipoAngulo != null) {
                idTipoAngulo.getDetalleAlineacionList().add(detalleAlineacion);
                idTipoAngulo = em.merge(idTipoAngulo);
            }
            if (idFuncionEje != null) {
                idFuncionEje.getDetalleAlineacionList().add(detalleAlineacion);
                idFuncionEje = em.merge(idFuncionEje);
            }
            if (idAlineacion != null) {
                idAlineacion.getDetalleAlineacionList().add(detalleAlineacion);
                idAlineacion = em.merge(idAlineacion);
            }
            if (idNeumatico != null) {
                idNeumatico.getDetalleAlineacionList().add(detalleAlineacion);
                idNeumatico = em.merge(idNeumatico);
            }
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(DetalleAlineacion detalleAlineacion) throws NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            DetalleAlineacion persistentDetalleAlineacion = em.find(DetalleAlineacion.class, detalleAlineacion.getId());
            TipoAngulo idTipoAnguloOld = persistentDetalleAlineacion.getIdTipoAngulo();
            TipoAngulo idTipoAnguloNew = detalleAlineacion.getIdTipoAngulo();
            FuncionEje idFuncionEjeOld = persistentDetalleAlineacion.getIdFuncionEje();
            FuncionEje idFuncionEjeNew = detalleAlineacion.getIdFuncionEje();
            Alineaciones idAlineacionOld = persistentDetalleAlineacion.getIdAlineacion();
            Alineaciones idAlineacionNew = detalleAlineacion.getIdAlineacion();
            Neumaticos idNeumaticoOld = persistentDetalleAlineacion.getIdNeumatico();
            Neumaticos idNeumaticoNew = detalleAlineacion.getIdNeumatico();
            if (idTipoAnguloNew != null) {
                idTipoAnguloNew = em.getReference(idTipoAnguloNew.getClass(), idTipoAnguloNew.getId());
                detalleAlineacion.setIdTipoAngulo(idTipoAnguloNew);
            }
            if (idFuncionEjeNew != null) {
                idFuncionEjeNew = em.getReference(idFuncionEjeNew.getClass(), idFuncionEjeNew.getId());
                detalleAlineacion.setIdFuncionEje(idFuncionEjeNew);
            }
            if (idAlineacionNew != null) {
                idAlineacionNew = em.getReference(idAlineacionNew.getClass(), idAlineacionNew.getId());
                detalleAlineacion.setIdAlineacion(idAlineacionNew);
            }
            if (idNeumaticoNew != null) {
                idNeumaticoNew = em.getReference(idNeumaticoNew.getClass(), idNeumaticoNew.getId());
                detalleAlineacion.setIdNeumatico(idNeumaticoNew);
            }
            detalleAlineacion = em.merge(detalleAlineacion);
            if (idTipoAnguloOld != null && !idTipoAnguloOld.equals(idTipoAnguloNew)) {
                idTipoAnguloOld.getDetalleAlineacionList().remove(detalleAlineacion);
                idTipoAnguloOld = em.merge(idTipoAnguloOld);
            }
            if (idTipoAnguloNew != null && !idTipoAnguloNew.equals(idTipoAnguloOld)) {
                idTipoAnguloNew.getDetalleAlineacionList().add(detalleAlineacion);
                idTipoAnguloNew = em.merge(idTipoAnguloNew);
            }
            if (idFuncionEjeOld != null && !idFuncionEjeOld.equals(idFuncionEjeNew)) {
                idFuncionEjeOld.getDetalleAlineacionList().remove(detalleAlineacion);
                idFuncionEjeOld = em.merge(idFuncionEjeOld);
            }
            if (idFuncionEjeNew != null && !idFuncionEjeNew.equals(idFuncionEjeOld)) {
                idFuncionEjeNew.getDetalleAlineacionList().add(detalleAlineacion);
                idFuncionEjeNew = em.merge(idFuncionEjeNew);
            }
            if (idAlineacionOld != null && !idAlineacionOld.equals(idAlineacionNew)) {
                idAlineacionOld.getDetalleAlineacionList().remove(detalleAlineacion);
                idAlineacionOld = em.merge(idAlineacionOld);
            }
            if (idAlineacionNew != null && !idAlineacionNew.equals(idAlineacionOld)) {
                idAlineacionNew.getDetalleAlineacionList().add(detalleAlineacion);
                idAlineacionNew = em.merge(idAlineacionNew);
            }
            if (idNeumaticoOld != null && !idNeumaticoOld.equals(idNeumaticoNew)) {
                idNeumaticoOld.getDetalleAlineacionList().remove(detalleAlineacion);
                idNeumaticoOld = em.merge(idNeumaticoOld);
            }
            if (idNeumaticoNew != null && !idNeumaticoNew.equals(idNeumaticoOld)) {
                idNeumaticoNew.getDetalleAlineacionList().add(detalleAlineacion);
                idNeumaticoNew = em.merge(idNeumaticoNew);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = detalleAlineacion.getId();
                if (findDetalleAlineacion(id) == null) {
                    throw new NonexistentEntityException("The detalleAlineacion with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            DetalleAlineacion detalleAlineacion;
            try {
                detalleAlineacion = em.getReference(DetalleAlineacion.class, id);
                detalleAlineacion.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The detalleAlineacion with id " + id + " no longer exists.", enfe);
            }
            TipoAngulo idTipoAngulo = detalleAlineacion.getIdTipoAngulo();
            if (idTipoAngulo != null) {
                idTipoAngulo.getDetalleAlineacionList().remove(detalleAlineacion);
                idTipoAngulo = em.merge(idTipoAngulo);
            }
            FuncionEje idFuncionEje = detalleAlineacion.getIdFuncionEje();
            if (idFuncionEje != null) {
                idFuncionEje.getDetalleAlineacionList().remove(detalleAlineacion);
                idFuncionEje = em.merge(idFuncionEje);
            }
            Alineaciones idAlineacion = detalleAlineacion.getIdAlineacion();
            if (idAlineacion != null) {
                idAlineacion.getDetalleAlineacionList().remove(detalleAlineacion);
                idAlineacion = em.merge(idAlineacion);
            }
            Neumaticos idNeumatico = detalleAlineacion.getIdNeumatico();
            if (idNeumatico != null) {
                idNeumatico.getDetalleAlineacionList().remove(detalleAlineacion);
                idNeumatico = em.merge(idNeumatico);
            }
            em.remove(detalleAlineacion);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<DetalleAlineacion> findDetalleAlineacionEntities() {
        return findDetalleAlineacionEntities(true, -1, -1);
    }

    public List<DetalleAlineacion> findDetalleAlineacionEntities(int maxResults, int firstResult) {
        return findDetalleAlineacionEntities(false, maxResults, firstResult);
    }

    private List<DetalleAlineacion> findDetalleAlineacionEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from DetalleAlineacion as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public DetalleAlineacion findDetalleAlineacion(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(DetalleAlineacion.class, id);
        } finally {
            em.close();
        }
    }

    public int getDetalleAlineacionCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from DetalleAlineacion as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
